package pl.peterjack.servlet.dane.firma;

import java.io.IOException;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.LogFactoryImpl;

import pl.peterjack.SystemTools;
import pl.peterjack.model.PMF;
import pl.peterjack.model.dane.Firma;
import pl.peterjack.model.dane.Pracownik;
import pl.peterjack.model.dane.RezultatOdpowiedz;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.gson.Gson;

public class FirmaDane extends HttpServlet {

	Log log = new LogFactoryImpl().getInstance(FirmaDane.class);

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		Key id = KeyFactory.createKey(Firma.class.getSimpleName(),
				((Firma)req.getSession().getAttribute("firma")).getId() );
		RezultatOdpowiedz result = new RezultatOdpowiedz();
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Pracownik pracownik = (Pracownik) req.getSession().getAttribute("firma_pracownik");
		if (req.getSession().getAttribute("firma_klient") != null || pracownik != null) {
			req.getSession().invalidate();
			resp.setContentType("text/plain");
			resp.setStatus(resp.SC_MOVED_TEMPORARILY);
			resp.setHeader("Location", "/");
			return;
		}
		Firma firma = pm.getObjectById(Firma.class, id);
		// sprawdzamy czy wolny login
		if (!firma.getLogin().equals(req.getParameter("login"))) {
			 try {
			    	String queryStr = "select from " + Firma.class.getName() + 
			        " where login == :p1  ";
				    List<Firma> results = (List<Firma>) pm.newQuery(queryStr).execute(req.getParameter("login"));
				    if (results != null && results.size()>0) {
				    	result.setSuccess(false);
				    	result.setData( null );
				    	result.setMessage("Login juz zajety");
				    	Gson gson = new Gson();
					    resp.setCharacterEncoding("UTF-8");
				        resp.getWriter().println(gson.toJson(result));
				        return; 
				    }
				    
			    } catch (Exception e) {
					// nie robimy nic
				}
		}
		// aktualizacja danych
		String haslo = req.getParameter("haslo");
		try {
			// MessageDigest digest =
			// java.security.MessageDigest.getInstance("MD5");
			// digest.update(haslo.getBytes());
			// haslo = digest.digest().toString();
		} catch (Exception e) {
		}
		if (haslo != null && !haslo.equals(firma.getHaslo())
				&& !"".equals(haslo)) {
			firma.setHaslo(haslo); 
		}
		if ( !SystemTools.empty(req.getParameter("adres")) ) {
			firma.setAdres(req.getParameter("adres"));
		}
		if ( !SystemTools.empty(req.getParameter("email")) ) {
			firma.setEmail(req.getParameter("email"));
		}
		if ( !SystemTools.empty(req.getParameter("emailWlasciciela")) ) {
			firma.setEmailWlasciciela(req.getParameter("emailWlasciciela"));
		}
		if ( !SystemTools.empty(req.getParameter("imieNazwisko")) ) {
			firma.setImieNazwisko(req.getParameter("imieNazwisko"));
		}
		if ( !SystemTools.empty(req.getParameter("klient_zmien")) ) {
			firma.setKlientPodgladDanych("on".equals(req
					.getParameter("klientPodgladDanych")) ? true : false);
		}
		if ( !SystemTools.empty(req.getParameter("klient_zmien")) ) {
			firma.setKlientZmianaDanych("on".equals(req
					.getParameter("klientZmianaDanych")) ? true : false);
		}
		if ( !SystemTools.empty(req.getParameter("kodPocztowy")) ) {
			firma.setKodPocztowy(req.getParameter("kodPocztowy"));
		}
		if ( !SystemTools.empty(req.getParameter("login")) ) {
			firma.setLogin(req.getParameter("login"));
		}
		if ( !SystemTools.empty(req.getParameter("miejscowosc")) ) {
			firma.setMiejscowosc(req.getParameter("miejscowosc"));
		}
		if ( !SystemTools.empty(req.getParameter("nazwa")) ) {
			firma.setNazwa(req.getParameter("nazwa"));
		}
		if ( !SystemTools.empty(req.getParameter("opis")) ) {
			firma.setOpis(req.getParameter("opis"));
		}
		if ( !SystemTools.empty(req.getParameter("stronaWww")) ) {
			firma.setStronaWww(req.getParameter("stronaWww"));
		}
		if ( !SystemTools.empty(req.getParameter("adres")) ) {
			firma.setTelefon(req.getParameter("adres"));
		}
		if (!SystemTools.empty(req.getParameter("telefon"))) {
			firma.setTelefon(req.getParameter("telefon"));
		}
		if ( !SystemTools.empty(req.getParameter("nip")) ) {
			firma.setNip(req.getParameter("nip"));
		}
		if (!SystemTools.empty(req.getParameter("stylXML"))) {
			firma.setStylXml(req.getParameter("stylXML")); 
		}
		// TODO jakas walidacja
		// zapisujemy
		
		Firma fView = (Firma) firma.clone();
		if (fView != null) {
			fView.setHaslo("");
		} else {
			log.error("Nie udało się sklonować obiektu, jest nullem");
		}

		try {
			pm.makePersistent(firma);
			req.getSession().setAttribute("firma", firma); 
			result.setSuccess(true);
			result.setData(fView);
		} catch (Exception e) {
			e.printStackTrace();
			result.setSuccess(false);
		} finally {
			pm.close();
		}
		Gson gson = new Gson();
		// resp.setContentType("application/json");
	    resp.setCharacterEncoding("UTF-8");
		resp.getWriter().println(gson.toJson(result));
	}

}
